/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package db;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import beans.B_Persona;
import beans.B_Sexo;
import beans.B_TipoDocumentoIdentidad;
import conexion.Conexion;
import java.sql.Types;

/**
 *
 * @author JoseHernan
 */
public class DB_Persona {
    public static ArrayList<B_Persona> getList(int id) {
        ArrayList<B_Persona> list = new ArrayList<B_Persona>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            if (id == 0) {
                ps = con.prepareStatement(" SELECT p.id, p.nombres, p.apellidos, date_format(p.fecha_nacimiento, '%d/%m/%Y') as fecha_nacimiento , p.id_sexo, s.nombre as sexo, p.id_tipo_documento_identidad, t.nombre as tipo_documento_identidad, p.numero_documento_identidad FROM tbl_persona p inner join tbl_sexo s on s.id = p.id_sexo inner join tbl_tipo_documento_identidad t on t.id = p.id_tipo_documento_identidad where p.removed = false ");
            } else {
                ps = con.prepareStatement(" SELECT p.id, p.nombres, p.apellidos, date_format(p.fecha_nacimiento, '%d/%m/%Y') as fecha_nacimiento , p.id_sexo, s.nombre as sexo, p.id_tipo_documento_identidad, t.nombre as tipo_documento_identidad, p.numero_documento_identidad FROM tbl_persona p inner join tbl_sexo s on s.id = p.id_sexo inner join tbl_tipo_documento_identidad t on t.id = p.id_tipo_documento_identidad where p.removed = false and p.id = " + id);
            }
            rs = ps.executeQuery();
            B_Persona obj;
            B_Sexo objSexo;
            B_TipoDocumentoIdentidad objTipoDocumentoIdentidad;
            while (rs.next()) {
                obj = new B_Persona();
                //Asign values
                obj.setId(rs.getInt("id"));
                obj.setNombres(rs.getString("nombres"));
                obj.setApellidos(rs.getString("apellidos"));
                obj.setFechaNacimiento(rs.getString("fecha_nacimiento"));
                objSexo = new B_Sexo();
                objSexo.setId(rs.getInt("id_sexo"));
                objSexo.setNombre(rs.getString("sexo"));
                obj.setObjSexo(objSexo);
                objTipoDocumentoIdentidad = new B_TipoDocumentoIdentidad();
                objTipoDocumentoIdentidad.setId(rs.getInt("id_tipo_documento_identidad"));
                objTipoDocumentoIdentidad.setNombre(rs.getString("tipo_documento_identidad"));
                obj.setObjTipoDocumentoIdentidad(objTipoDocumentoIdentidad);
                obj.setNumeroDocumentoIdentidad(rs.getString("numero_documento_identidad"));
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    //SP CRUD
    public static String crud(B_Persona obj, String action) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_crud_persona(?,?,?,?,?,?,?,?,?,?)}");

            cs.registerOutParameter(1, Types.VARCHAR);
            cs.setString(2, action);
            cs.setInt(3, obj.getId());
            cs.setString(4, obj.getNombres());
            cs.setString(5, obj.getApellidos());
            cs.setString(6, obj.getFechaNacimiento());
            cs.setInt(7, obj.getObjSexo().getId());
            cs.setInt(8, obj.getObjTipoDocumentoIdentidad().getId());
            cs.setString(9, obj.getNumeroDocumentoIdentidad());
            cs.setString(10, obj.getUser());
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }
}
